/**
 * @param {number[]} arr
 * @return {boolean}
 */
export var canReorderDoubled = function (arr) {
  const cnt = new Map() // 记录每个数字出现的次数
  for (const num of arr) {
    cnt.set(num, (cnt.get(num) || 0) + 1)
  }
  // 处理0,如果0不是偶数个，则为false
  if ((cnt.get(0) || 0) % 2 !== 0) {
    return false
  }
  // 处理其他数字
  // 把所有数字按绝对值从小到大加入列表，并历遍这个列表
  const list = [...cnt.keys()]
  list.sort((a, b) => Math.abs(a) - Math.abs(b))
  for (const num of list) {
    if ((cnt.get(2 * num) || 0) < cnt.get(num)) {
      return false
    }
    cnt.set(2 * num, (cnt.get(2 * num) || 0) - cnt.get(num))
  }
  return true
}
